package clasesPrincipales;

import java.util.Date;

import org.uqbar.commons.model.Entity;
import org.uqbar.commons.model.UserException;

@SuppressWarnings("serial")
public class Contacto extends Entity {

	public static final String NOMBRE = "nombre";
	public static final String TELEFONO = "telefono";
	public static final String MAIL = "mail";
	public static final String FECHA_NAC = "fechaNac";
	public static final String OBS = "observaciones";
	public static final String CIUDAD = "ciudad";
	// Variables

	private String nombre;
	private String telefono;
	private String mail;
	private Date fechaNac;
	private String observaciones;
	private Ciudad ciudad;

	// Constructores

	public Contacto() {}

	public Contacto(String nombre) {
		super();
		this.nombre = nombre;
		this.telefono = "";
		this.mail = "";
		this.fechaNac = null;
		this.ciudad = new Ciudad("");
	}
	public Contacto(String nombre, String telefono) {
		super();
		this.nombre = nombre;
		this.telefono = telefono;
		this.mail = "";
		this.fechaNac = null;
		this.ciudad = new Ciudad("");
	}
	public Contacto(String nombre, String telefono, String mail, Date fechaNac, Ciudad ciudad) {
		super();
		this.nombre = nombre;
		this.telefono = telefono;
		this.mail = mail;
		this.fechaNac = fechaNac;
		this.ciudad = ciudad;
	}

	public Contacto(String nombre, String telefono, String mail, Date fechaNac, String observaciones, Ciudad ciudad) {
		super();
		this.nombre = nombre;
		this.telefono = telefono;
		this.mail = mail;
		this.fechaNac = fechaNac;
		this.observaciones = observaciones;
		this.ciudad = ciudad;
	}

	// Get&Set

	// nombre
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		String oldNombre = this.nombre;
		this.nombre = nombre;
		this.firePropertyChange(NOMBRE, oldNombre, this.nombre);
	}

	// telefono
	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		String oldTelefono = this.telefono;
		this.telefono = telefono;
		this.firePropertyChange(TELEFONO, oldTelefono, this.telefono);
	}

	// mail
	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		String oldMail = this.mail;
		this.mail = mail;
		this.firePropertyChange(MAIL, oldMail, this.mail);

	}

	// fecha de nacimiento
	public Date getFechaNac() {
		return this.fechaNac;
	}

	public void setFechaNac(Date fechaNac) {
		if (fechaNac == null) {
			throw new UserException("Ingrese una fecha válida");
		} else if (fechaNac.after(new Date())) {
			throw new UserException(
					"La fecha de ingreso debe ser anterior a la actual");
		}
		Date oldfecha = this.fechaNac;
		this.fechaNac = fechaNac;
		this.firePropertyChange(MAIL, oldfecha, this.fechaNac);

	}

	// observacines
	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		String oldObs = this.observaciones;
		this.observaciones = observaciones;
		this.firePropertyChange(OBS, oldObs, this.observaciones);
	}

	// cuidad
	public Ciudad getCiudad() {
		return ciudad;
	}

	public void setCiudad(Ciudad ciudad) {
		Ciudad oldCiudad = this.ciudad;
		this.ciudad = ciudad;
		this.firePropertyChange(CIUDAD, oldCiudad, this.ciudad);
	}

}
